//
// Created by chen on 2025/1/15.
//

#ifndef 数据结构学习_COMMON_H
#define 数据结构学习_COMMON_H

// 常用标准库
#include <iostream>     // 标准输入输出
#include <string>       // 字符串
#include <vector>       // 动态数组
#include <queue>        // 队列
#include <stack>        // 栈
#include <map>          // 映射
#include <set>          // 集合
#include <unordered_map>// 哈希表
#include <unordered_set>// 哈希集合
#include <algorithm>    // 算法库
#include <cmath>        // 数学函数
#include <cstring>      // C风格字符串操作
#include <cstdio>       // C风格输入输出
#include <ctime>        // 时间相关

// 使用标准命名空间
using namespace std;

// 常用类型别名
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;

// 常用宏定义
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define PI 3.14159265358979323846

// 实用函数

// 快速读取整数
inline int read() {
    int x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-') f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}

// 打印数组
template<typename T>
void printArray(T arr[], int n) {
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

// 打印vector
template<typename T>
void printVector(const vector<T>& vec) {
    for (const auto& elem : vec) {
        cout << elem << " ";
    }
    cout << endl;
}



// 交换两个值
template<typename T>
void swap(T& a, T& b) {
    T temp = a;
    a = b;
    b = temp;
}

// 获取最大值
template<typename T>
T max(T a, T b) {
    return a > b ? a : b;
}

// 获取最小值
template<typename T>
T min(T a, T b) {
    return a < b ? a : b;
}

// 判断是否是素数
bool isPrime(int n) {
    if (n <= 1) return false;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) return false;
    }
    return true;
}

// 最大公约数
int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}

// 最小公倍数
int lcm(int a, int b) {
    return a / gcd(a, b) * b;
}

#endif //数据结构学习_COMMON_H
